// store/modules/route.js
import { getRoutesListApi } from '@/api/route'
/**
 * State: 存储应用状态数据
 */
const state = {
	// routeList: 路由列表，从 sessionStorage 加载，如果不存在则初始化为空数组
	routeList: JSON.parse(sessionStorage.getItem('routeList')) || [],
	// menuList: 菜单列表
	menuList: []
};


/**
 * Getters: 计算属性，用于从 state 中派生出一些状态
 */
const getters = {
	/**
	 * 获取路由列表
	 * @param {Object} state - Vuex state 对象
	 * @returns {Array} - 当前存储的路由列表
	 */
	getRouteList: (state : { routeList : any; }) => state.routeList,
	/**
	 * 获取菜单列表
	 * @param {Object} state - Vuex state 对象
	 * @returns {Array} - 当前存储的菜单列表
	 */
	getMenuList: (state) => state.menuList
};

/**
 * Mutations: 更改 Vuex store 中的状态
 */
const mutations = {
	/**
	 * 添加路由到路由列表
	 * @param {Object} state - Vuex state 对象
	 * @param {Object} route - 要添加的路由对象
	 */
	ADD_ROUTE(state : { routeList : any[]; }, route : any) {
		state.routeList.push(route);
		// 更新 sessionStorage 中的路由列表
		sessionStorage.setItem('routeList', JSON.stringify(state.routeList));
	},
	/**
	 * 从路由列表中移除路由
	 * @param {Object} state - Vuex state 对象
	 * @param {Number} index - 要移除的路由在列表中的索引
	 */
	REMOVE_ROUTE(state : { routeList : any[]; }, index : any) {
		state.routeList.splice(index, 1);
		// 更新 sessionStorage 中的路由列表
		sessionStorage.setItem('routeList', JSON.stringify(state.routeList));
	},
	/**
	 * 设置路由列表
	 * @param {Object} state - Vuex state 对象
	 * @param {Array} routeList - 要设置的路由列表
	 */
	SET_MENU_LIST(state, menuList) {
		state.menuList = menuList;
	}
};

/**
 * Actions: 异步操作或复杂的同步操作
 */
const actions = {
	/**
	 * 添加路由到路由列表，如果路由已经存在则不添加
	 * @param {Function} commit - 提交 mutation 的方法
	 * @param {Object} route - 要添加的路由对象
	 */
	addRoute({ commit, state } : any, route : { fullPath : any; }) {
		if (!state.routeList.some((r : { fullPath : any; }) => r.fullPath === route.fullPath)) {
			commit('ADD_ROUTE', route);
		}
	},
	/**
	 * 从路由列表中移除路由
	 * @param {Function} commit - 提交 mutation 的方法
	 * @param {Number} index - 要移除的路由在列表中的索引
	 */
	removeRoute({ commit } : any, index : any) {
		commit('REMOVE_ROUTE', index);
	},
	/**
	 * 初始化路由列表，从 sessionStorage 加载
	 * @param {Function} commit - 提交 mutation 的方法
	 */
	initializeRouteList({ commit }) {
		const routeList = JSON.parse(sessionStorage.getItem('routeList')) || [];
		commit('SET_ROUTE_LIST', routeList);
	},
	/**
	 * 获取菜单列表
	 * @param {Function} commit - 提交 mutation 的方法
	 */
	async fetchMenuList({ commit }) {
		try {
			const { data } = await getRoutesListApi(); // 假设这是你获取菜单数据的 API
			commit('SET_MENU_LIST', data); // 更新 Vuex 中的 menuList
		} catch (error) {
			console.error('获取菜单列表失败', error);
		}
	}
};

// 导出 Vuex 模块
export default {
	namespaced: true,
	state,
	getters,
	mutations,
	actions
};